package com.ruoyi.framework.websocket;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import jakarta.websocket.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * websocket 客户端用户集
 *
 */
public class WebSocketUsers {

    private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketUsers.class);
    private static Map<String, Session> USERS = new ConcurrentHashMap<>();

    /**
     * 存储用户
     *
     * @param userId 用户唯一标识
     * @param session 用户信息
     */
    public static void put(String userId, Session session) {
        USERS.put(userId, session);
    }

    /**
     * 移除用户
     *
     * @param userId 用户唯一标识
     */
    public static boolean remove(String userId) {
        LOGGER.info("\n 正在移出用户 - {}", userId);
        Session remove = USERS.remove(userId);
        if (remove != null) {
            LOGGER.info("\n 移出结果 - 成功");
            return true;
        } else {
            LOGGER.info("\n 移出结果 - 失败");
            return false;
        }
    }

    /**
     * 获取特定用户的会话
     *
     * @param userId 用户唯一标识
     * @return 用户的会话信息
     */
    public static Session get(String userId) {
        return USERS.get(userId);
    }

    /**
     * 发送文本消息
     *
     * @param session 用户的会话信息
     * @param message 消息内容
     */
    public static void sendMessageToUserByText(Session session, String message) {
        if (session != null) {
            try {
                session.getBasicRemote().sendText(message);
            } catch (IOException e) {
                LOGGER.error("\n[发送消息异常]", e);
            }
        } else {
            LOGGER.info("\n[你已离线]");
        }
    }
}
